package com.mmall.annotation;
/*
 * @Retention(RetentionPolicy.SOURCE)
 * 这个注解的意思是让MyAnnotation注解只在java源文件中存在，编译成.class文件后注解就不存在了
 * @Retention(RetentionPolicy.CLASS)
 * 这个注解的意思是让MyAnnotation注解在java源文件(.java文件)中存在，编译成.class文件后注解也还存在，
 * 被MyAnnotation注解类标识的类被类加载器加载到内存中后MyAnnotation注解就不存在了
 */
/*
 * 这里是在注解类MyAnnotation上使用另一个注解类，这里的Retention称为元注解。
 * Retention注解括号中的"RetentionPolicy.RUNTIME"意思是让MyAnnotation这个注解的生命周期一直程序运行时都存在
 */
//Target注解决定MyAnnotation注解可以加在哪些成分上，如加在类身上，或者属性身上，或者方法身上等成分

/*
这里有四种类型的元注解：

        1. @Documented —— 指明拥有这个注解的元素可以被javadoc此类的工具文档化。
        这种类型应该用于注解那些影响客户使用带注释的元素声明的类型。
        如果一种声明使用Documented进行注解，这种类型的注解被作为被标注的程序成员的公共API。

        2. @Target——指明该类型的注解可以注解的程序元素的范围。
        该元注解的取值可以为TYPE,METHOD,CONSTRUCTOR,FIELD等。
        如果Target元注解没有出现，那么定义的注解可以应用于程序的任何元素。

        3. @Inherited——指明该注解类型被自动继承。
        如果用户在当前类中查询这个元注解类型并且当前类的声明中不包含这个元注解类型，那么也将自动查询当前类的父类是否存在Inherited元注解，这个动作将被重复执行知道这个标注类型被找到，或者是查询到顶层的父类。

        4.@Retention——指明了该Annotation被保留的时间长短。
        RetentionPolicy取值为SOURCE,CLASS,RUNTIME。
*/


import java.lang.annotation.*;

/**
 * 自定义权限注解
 *是否需要判断权限，默认为true需要判断权限，设定为false的情况下不判断权限
 */
@Documented
@Inherited
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface RequsetPremission {
    boolean state() default true;
    String permissionName();
    String url();
}
